package com.rabbit.service;

import com.github.pagehelper.PageInfo;
import com.rabbit.exception.BusinessException;
import com.rabbit.vo.req.RoleReq;
import com.rabbit.vo.res.RoleRes;

/**
 * <h1>角色管理业务接口</h1>
 *
 * @author zjw
 * @date 2022/1/18 9:20
 */
public interface RoleService {

    /**
     * 角色列表查询
     *
     * @param roleReq 查询请求封装
     * @return PageInfo 分页对象
     */
    PageInfo<RoleRes> queryRoleList(RoleReq roleReq);

    /**
     * 检查是否为管理员
     *
     * @param roleReq 角色信息
     * @throws BusinessException 业务异常
     */
    void checkIsAdmin(RoleReq roleReq) throws BusinessException;

    /**
     * 删除角色
     *
     * @param roleReq 角色信息
     */
    void deleteRole(RoleReq roleReq);

    /**
     * 检查角色是否被使用
     *
     * @param roleReq 角色信息
     * @throws BusinessException 业务异常
     */
    void checkRoleUsed(RoleReq roleReq) throws BusinessException;

    /**
     * 修改角色状态
     *
     * @param roleReq 角色信息
     */
    void updateRoleEnabled(RoleReq roleReq);

    /**
     * 根据角色编号查询角色信息
     *
     * @param roleId 角色编号
     * @return RoleRes 角色信息
     */
    RoleRes queryRoleById(Long roleId);

    /**
     * 添加/更新时 数据校验
     *
     * @param roleReq  角色添加/更新数据封装
     * @param operType 操作类型 1新增 2修改
     * @throws BusinessException 业务异常
     */
    void checkUnique(RoleReq roleReq, int operType) throws BusinessException;

    /**
     * 添加角色
     *
     * @param roleReq 角色信息
     */
    void addRole(RoleReq roleReq);

    /**
     * 更新角色
     *
     * @param roleReq 角色信息
     */
    void updateRole(RoleReq roleReq);
}
